
// void test1()
// {
//     // int a = 10;
//     // int& ra = a;
//     // cout<<a<<" "<<ra<<endl;
//     // ra = 1;
//     // cout<<a<<" "<<ra<<endl;

//     // int&& rr = 10;
//     // const int& raa = 10;
//     // cout<<rr<<endl;
//     // rr++;
//     // cout<<rr<<endl;

//     // cout<<raa<<endl;
//     int a = 2;
//     int&& ra = std::move(a);
//     cout<<ra<<endl;
//     // int&& ra = std::move(a);
// }

// class A
// {
// public:
//     A()
//         :_b(10)
//         ,_a(_b)
//     {}
//     void Print()
//     {
//         cout<<_a<<" "<<_b<<endl;
//     }
// private:
//     int _a;
//     int _b;
// };//初始化列按照声明的顺序初始化


// void test2()
// {
//     A aa;
//     aa.Print();
// }
// class EXAM
// {
//     public:
//     static void Print()
//     {
//         cout<<_a <<endl;
//     }
//     static int _a;
// };
// int EXAM::_a = 10;

// void test3()
// {
//     EXAM::Print();
// }

// #include<iostream>
// #include<string>
// #include<cassert>
// using namespace std;

// class String
// {
// friend ostream& operator<<(ostream& out,const String& s);

// public:
//     String(size_t size)
//         :_size(size)
//         ,_capacity(size)
//         ,_array(new char[size]{0})
//     {}
//     char& operator[](int i)
//     {
//         assert(i >= 0 && i < _size);
//         return _array[i];
//     }
//     size_t Size()
//     {
//         return _size;
//     }
//     ~String()
//     {
//         _size = -1;
//         _capacity = -1;
//         if(_array)
//         {
//             delete _array;
//         }
//         _array = nullptr;
//     }
// private:
//     size_t _size;
//     size_t _capacity;
//     char* _array;
// };
// ostream& operator<<(ostream& out,const String& s)
// {
//     out<<"size:"<<s._size<<" capacity:"<<s._capacity<<" _array:";
//     for(int i = 0;i < s._size;++i)
//     {
//         out<<s._array[i];
//     }
//     return out;
// }

// String s(10);
// int size = s.Size();
// for(int i = 0;i < size;++i)
// {
//     s[i] = i + '0';
// }
// cout<<s<<endl;

// class A
// {
// public:
//     void Print()
//     {
//         cout<<"A"<<endl;
//         // Hello();
//     }
//     static void Hello()
//     {
//         cout<<"hello"<<endl;
//         // Print();
//     }
// };int globalVar = 1;
// static int staticGlobalVar = 1;
// void Test()
// {
//     static int staticVar = 1;
//     int localVar = 1;
//     int num1[10] = { 1, 2, 3, 4 };
//     char char2[] = "abcd";
//     const char* pChar3 = "abcd";
//     int* ptr1 = (int*)malloc(sizeof(int) * 4);
//     int* ptr2 = (int*)calloc(4, sizeof(int));
//     int* ptr3 = (int*)realloc(ptr2, sizeof(int) * 4);
//     free(ptr1);
//     free(ptr3);
// }
// 1. 选择题：
// 选项: A.栈 B.堆 C.数据段(静态区) D.代码段(常量区)
// globalVar在哪里？____ staticGlobalVar在哪里？____
// staticVar在哪里？____ localVar在哪里？____
// num1 在哪里？____
// char2在哪里？____ *char2在哪里？___
// pChar3在哪里？____ *pChar3在哪里？____
// ptr1在哪里？____ *ptr1在哪里？____
// 2. 填空题：sizeof(char2) = ____; strlen(char2) = ____;
// sizeof(pChar3) = ____; strlen(pChar3) = ____;
// sizeof(ptr1) = ____;
// 3. sizeof 和 strlen 区别？
// sizeof(num1) = ____;

    // test1();
    // test2();
    // test3();
    // A a;
    // a.Print();


// class A
// {
// public:
//     A(int a,int b)
//         :_a(a)
//         ,_b(b)
//     {}
//     int _a;
//     int _b;
// };



// int main()
// {
//     A* pa = (A*)malloc(sizeof(A));
//     new(pa)A(1,2);
//     cout<<pa->_a<<" "<<pa->_b<<endl;
//     return 0;
// }

#include<iostream>
#include<string>
#include<cassert>
using namespace std;


// template <typename T>
// void my_swap(T& a, T& b)
// {
//     T temp = std::move(a);
//     a = std::move(b);
//     b = std::move(temp);
// }

// int main()
// {
//     int a = 10,b = 0;
//     cout<<a<<" "<<b<<endl;
//     swap(a,b);
//     cout<<a<<" "<<b<<endl;

//     return 0;
// }
class A
{
public:
virtual void func(int val = 1){ std::cout<<"A->"<< val <<std::endl;}virtual void test(){ func();}
};
class B : public A
{
public:
void func(int val=0){ std::cout<<"B->"<< val <<std::endl; }
};
int main(int argc ,char* argv[])
{
B*p = new B;
p->test();
return 0;
}